package com.niiwoo.civet.trade.service.invest;

import com.niiwoo.civet.trade.dto.common.SysInvestConfigDTO;
import com.niiwoo.civet.trade.dto.request.AutoInvestSettingRequestDTO;
import com.niiwoo.civet.trade.dto.request.BatchInvestRequestDTO;
import com.niiwoo.civet.trade.dto.request.InvestPriorityChangeRequest;
import com.niiwoo.civet.trade.dto.request.contract.CommissionAuthHistoryRequestDTO;
import com.niiwoo.civet.trade.dto.response.UserAutoInvestConfigDTO;
import com.niiwoo.civet.trade.dto.response.UserBatchInvestConfigDTO;
import com.niiwoo.civet.trade.dto.response.contract.CommissionAuthAgreementResponseDTO;
import com.niiwoo.tripod.provider.dto.response.PageResponseDTO;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 自动、批量投资相关
 * Created by zhangwanli on 2017/11/23.
 */
public interface AutoInvestDubboService {

    /**
     * 查询用户自动投资配置
     *
     * @param userId 用户id
     * @return
     */
    UserAutoInvestConfigDTO queryUserAutoInvestConfig(@NotNull String userId);

    /**
     * 查询用户批量投资配置
     *
     * @param userId
     * @return
     */
    UserBatchInvestConfigDTO queryUserBatchInvestConfig(String userId);
 

    /**
     * 应用/保存用户自动投资设置，未设置过则新增，否则更新
     *
     * @param dto
     */
    void applyAutoInvestSetting(AutoInvestSettingRequestDTO dto);

    /**
     * 关闭自动投资设置
     *
     * @param userId
     */
    void disableAutoInvest(@NotNull String userId);

    /**
     * 批量投资<P>
     * 1、保存批量投资设置<p>
     * 2、执行批量投资
     *
     * @param dto
     */
    void batchInvest(BatchInvestRequestDTO dto);

    /**
     * 执行自动投资，由MQ消费者调用
     *
     * @param projectId 标的ID
     * @return 是否ack MQ消息
     */
    boolean executeAutoInvest(@NotNull Long projectId);

    /**
     * 执行批量投资，由MQ消费者调用
     *
     * @param mqMsg MQ消息
     * @return 是否ack MQ消息
     */
    boolean executeBatchInvest(BatchInvestRequestDTO mqMsg);

    /**
     * 修改自动投资优先级
     *
     * @param changeList 修改信息列表
     */
    void changeAutoInvestPriority(@NotEmpty List<InvestPriorityChangeRequest> changeList);

    /**
     * 关闭所有自动投资
     */
    void disableAllAutoInvest();

    /**
     * 清除所有批量投资设置
     */
    void cleanAllBatchInvestSetting();

    /**
     * 查询自动、批量投资委托授权记录
     *
     * @param request
     * @return
     */
    PageResponseDTO<CommissionAuthAgreementResponseDTO> queryCommissionAuthHistory(@NotNull CommissionAuthHistoryRequestDTO request);

    /**
     * 重新加载自动投资人到队列(休息区人员回归)
     */
    void reloadAutoInvestorQueue();
    /**
     * 重新加载自动投资人到队列(全部初始化)
     */
   default void reloadAllAutoInvestorQueue() {
	   throw new UnsupportedOperationException("unImpl");
   };

    /**
     * 新增系统投资配置触发事件
     */
    void onSysInvestSettingAdded(SysInvestConfigDTO sysInvestConfig);
    /**
     * 修改指定用户系统关闭的显示
     * @param userId
     */
 

	void updateReadFalg(String userId);
	
	/**
	 * 自动投资配置初始化，只执行一次
	 */
	default void dataTransfer() {
		throw new UnsupportedOperationException("unImpl");
	}

	
	

}
